<?php
	include_once('Querys.php');
	include_once('UsuarioService.php');
	include_once('vo/Mensaje.php');
	
	class MensajeriaService extends Querys{
		
		var $tabla = "mensajes";
		
		public function contarNoLeidos($id_usuario, $seccion)
		{
			if($seccion == "entrada")
			{
				$result = $this->consulta("SELECT COUNT(leido_d) FROM ".$this->tabla." WHERE mensajes.destinatario = $id_usuario AND leido_d = 0 AND estado_d = 1");
				while($fila = mysql_fetch_array($result)){
					return $fila['COUNT(leido_d)'];
				}
			}else if($seccion == "eliminados")
			{
				$result = $this->consulta("SELECT COUNT(*) FROM mensajes WHERE (mensajes.destinatario = $id_usuario AND leido_d = 0 AND estado_d = 3) OR (mensajes.remitente = $id_usuario AND leido_r = 0 AND estado_r = 3)");
				while($fila = mysql_fetch_array($result)){
					return $fila['COUNT(*)'];
				}
			}
		}
		
		public function traerMensajes($id_usuario, $seccion)
		{
			switch($seccion)
			{
				case "entrada":
				$result = $this->consulta("SELECT mensajes.*, usuarios.nombre FROM ".$this->tabla." JOIN usuarios ON mensajes.remitente = usuarios.id WHERE mensajes.destinatario = $id_usuario AND (mensajes.estado_d = 1 OR mensajes.estado_d = 5) ORDER BY fecha DESC, hora DESC");
				break;
				
				case "enviados":
				$result = $this->consulta("SELECT mensajes.*, usuarios.nombre FROM ".$this->tabla." JOIN usuarios ON mensajes.destinatario = usuarios.id WHERE mensajes.remitente = $id_usuario AND mensajes.estado_r = 1 ORDER BY fecha DESC, hora DESC");
				break;
				
				case "borradores":
				$result = $this->consulta("SELECT mensajes.*, usuarios.nombre FROM ".$this->tabla." JOIN usuarios ON mensajes.destinatario = usuarios.id WHERE mensajes.remitente = $id_usuario AND mensajes.estado_r = 2 ORDER BY fecha DESC, hora DESC");
				break;
				
				case "papelera":
				$result = $this->consulta("SELECT mensajes.*, usuarios.nombre FROM ".$this->tabla." JOIN usuarios ON mensajes.remitente = usuarios.id WHERE (mensajes.destinatario = $id_usuario AND mensajes.estado_d = 3) OR (mensajes.remitente = $id_usuario AND mensajes.estado_r = 3) ORDER BY fecha DESC, hora DESC");
				break;
			}
			
			while($fila = $this->fetch($result))
			{
				$mensaje = $this->armarMensaje($fila);
				
				$mensajes[] = $mensaje;
			}
			
			return $mensajes;
		}
		
		public function mostrarMensaje($id_mensaje)
		{
			$result = $this->consulta("SELECT mensajes.*, u1.nombre AS nombre, u2.nombre AS destinatario FROM mensajes JOIN usuarios AS u1 ON mensajes.remitente = u1.id JOIN usuarios AS u2 ON mensajes.destinatario = u2.id WHERE mensajes.id = $id_mensaje");
			while($fila = $this->fetch($result))
			{
				$mensaje = $this->armarMensaje($fila);
			}
			
			return $mensaje;
		}
		
		public function eliminarMensajes($id,$seccion)
		{
			switch($seccion)
			{
				case "entrada":
				/*BORRA RECIBIDOS Y LOS MANDA A PAPELERA*/
				$result = $this->consulta("UPDATE ".$this->tabla." SET estado_d = 3 WHERE ".$this->tabla.".id = $id");
				break;
				case "enviados":
				case "borradores":
				/*BORRA BORRADORES Y ENVIADOS, DEFINITIVAMENTE*/
				$result = $this->consulta("UPDATE ".$this->tabla." SET estado_r = 4 WHERE ".$this->tabla.".id = $id");
				break;
				case "papelera":
				/*BORRA RECIBIDOS ELIMINADOS, DEFINITIVAMENTE*/
				$result = $this->consulta("UPDATE ".$this->tabla." SET estado_d = 4 WHERE ".$this->tabla.".id = $id");
				break;
			}
		}
		
		public function marcarMensajes($id,$accion)
		{
			switch($accion)
			{
				case "leido":
					$result = $this->consulta("UPDATE ".$this->tabla." SET leido_d = 1 WHERE ".$this->tabla.".id = $id");
				break;
				case "noLeido":
					$result = $this->consulta("UPDATE ".$this->tabla." SET leido_d = 0 WHERE ".$this->tabla.".id = $id");
				break;
			}
		}
		
		public function restaurarMensajes($id){
			$result = $this->consulta("UPDATE ".$this->tabla." SET estado_d = 1 WHERE ".$this->tabla.".id = $id");
		}
		
		public function getNuevos($id_usuario){
			$result = $this->consulta("SELECT COUNT(*) AS nuevos FROM ".$this->tabla." WHERE destinatario = $id_usuario AND leido_d = 0 AND estado_d = 1 AND fecha > DATE_SUB(CURDATE(),INTERVAL 7 DAY)");
			$fila = $this->fetch($result);
			
			return $fila["nuevos"];
		}
		
		public function armarMensaje($fila)
		{
			$mensaje = new Mensaje();
			$mensaje->id = $fila["id"];
			$mensaje->asunto = $fila["asunto"];
			$mensaje->texto = $fila["texto"];
			$mensaje->fecha = $fila["fecha"];
			$mensaje->hora = $fila["hora"];
			$mensaje->remitente = $fila["nombre"];
			$mensaje->destinatario = $fila["nombre"];
			$mensaje->estado_r = $fila["estado_r"];
			$mensaje->estado_d = $fila["estado_d"];
			$mensaje->leido_d = $fila["leido_d"];
			
			return $mensaje;
		}
		
		public function save($mensaje)
		{
			if($this->consulta("INSERT INTO ".$this->tabla." VALUES (null, '".$mensaje->asunto."', '".$mensaje->texto."', CURDATE(), CURTIME(), ".$mensaje->remitente.", '1', 1, ".$mensaje->destinatario.", '1', 0)")){
			
				$service = new UsuarioService();
				$usuario = $service->getUsuario($mensaje->destinatario);
				$this->enviarMail($usuario->email);
				
				return true;			
			}
			return false;
		}
		
		public function saveBorrador($mensaje)
		{
			$result = $this->consulta("INSERT INTO ".$this->tabla." VALUES (null, '".$mensaje->asunto."', '".$mensaje->texto."', CURDATE(), CURTIME(), ".$mensaje->remitente.", '".$mensaje->estado_r."', 1, ".$mensaje->destinatario.", '".$mensaje->estado_d."', 0)");
		}
		
		public function sendBorrador($mensaje)
		{
			if($this->consulta("UPDATE ".$this->tabla." SET asunto = '".$mensaje->asunto."', texto = '".$mensaje->texto."', fecha = CURDATE(), hora = CURTIME(), estado_r = '1', destinatario = ".$mensaje->destinatario.", estado_d = '1', leido_d = 1 WHERE ".$this->tabla.".id = ".$mensaje->id."")){
			
				$service = new UsuarioService();
				$usuario = $service->getUsuario($mensaje->destinatario);
				$this->enviarMail($usuario->email);
				
				return true;
			}
		}
		
		private function enviarMail($email){
		
			$header = "From: Scrumorg <".Conexion::EMAIL.">\r\n";
			$header .= "X-Mailer: PHP/" . phpversion() . "\r\n";
			$header .= "MIME-Version: 1.0\r\n";
			$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
			$header .= "Content-Transfer-Encoding: 7bit\r\n";
			$para = $email;
			
			$asunto = 'Mensaje Nuevo - ScrumOrg';
			
			$titulo = "Mensaje Nuevo.";
			$texto = "Te han enviado un mensaje en Scrumorg, para verlo debes ingresar a la secci&oacute;n de Mensajer&iacute;a";
			$link = Conexion::HTTP . Conexion::URL_BASE."/home";
			
			include("../controller/email.php");
			
			if(mail($para, $asunto, $mensaje, $header)){
				return true;
			}
		}
	}		
?>